package com.dms.modules.community.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.community.dto.CommunityPostDTO;
import com.dms.modules.community.dto.CommunityPostDetailDTO;
import com.dms.modules.community.entity.CommunityPost;
import org.springframework.web.multipart.MultipartFile;

public interface CommunityPostService extends IService<CommunityPost> {
    /**
     * 创建帖子
     * @param postDTO 帖子信息
     * @param userId 用户ID
     * @return 帖子ID
     */
    Long createPost(CommunityPostDTO postDTO, Long userId);

    /**
     * 更新帖子
     * @param userId 用户ID
     * @param id 帖子ID
     * @param postDTO 帖子信息
     * @return 是否更新成功
     */
    boolean updatePost(Long userId, Long id, CommunityPostDTO postDTO);

    /**
     * 删除帖子
     */
    boolean deletePost(Long userId, Long id);

    /**
     * 获取帖子详情
     */
    CommunityPostDetailDTO getPostDetail(Long userId, Long id);

    /**
     * 分页获取帖子列表
     */
    IPage<CommunityPostDetailDTO> getPostList(Long currentUserId, Page<CommunityPostDetailDTO> page, Long userId);

    /**
     * 点赞帖子
     */
    boolean likePost(Long userId, Long id);

    /**
     * 取消点赞帖子
     */
    boolean unlikePost(Long userId, Long id);

    /**
     * 收藏帖子
     */
    boolean favoritePost(Long userId, Long id);

    /**
     * 取消收藏帖子
     */
    boolean unfavoritePost(Long userId, Long id);

    /**
     * 获取用户收藏的帖子列表
     */
    IPage<CommunityPostDetailDTO> getFavoritePosts(Long userId, Page<CommunityPostDetailDTO> page);

    /**
     * 获取指定标签的帖子列表
     * @param currentUserId 当前用户ID
     * @param page 分页参数
     * @param tagId 标签ID
     * @return 帖子列表
     */
    IPage<CommunityPostDetailDTO> getPostsByTag(Long currentUserId, Page<CommunityPostDetailDTO> page, Long tagId);

    /**
     * 上传帖子图片
     * @param userId 用户ID
     * @param file 图片文件
     * @return 图片URL
     */
    String uploadImage(Long userId, MultipartFile file);
} 